﻿/*
 Program analogiczny do	WR-Z-12		(03-IV-113)
	Program wymaga maszyny ODRA UMCS

 Program perforuje napisy w tzw. kodzie wizualnym:
 znaki kodu dalekopisowego nr 2 wprowadzane z dalekopisu
 tłumaczy na układy rządków na taśmie wychodzącej z perforatora 8-kanałowego tak,
 iż układ dziurek przypomina kształtem litery, cyfry i znaki przestankowe
 o zmiennej szerokości do 11 kwintetów, pogrubione, w układzie poziomym.
 Program pracuje na obu ścieżkach ferrytowych i należy go startować od adresu 17400.
 Po zatrzymaniu się wystarczy wcisnąć [StartCPU] dla ponownego uruchomienia.
 Może być wywołany jako podprogram od adresu 17401 z adresem napisu w A w skali 21,
 kończącego się znakiem LF. Znak CR daje całkowicie zadziurkowane pole.
 Jeśli nie przełączono, to pierwszy znak jest z pocztu cyfr.

 Program jest zgodny z alfabetem dalekopisu TTY MKD-2 PL2.
*/


;Etyk:	Rozkaz			Komentarz
;=====	===================	================================
	:401 17400:		Adres początku programu

PROGR	:032 czTTY prog1 60	B6 = czTTY;	funkcja czytania znaku

PODPR	:726 00000 podp2 00	Ślad - powrót do progr. głównego
poczt	:000 00000 00000 00	Poczet: 0=cyfry, 64=litery
podp2	:021 temp6   +   60	[temp6] = B6;
	:021 temp5   +   50	[temp5] = B5;
	:021 temp4   +   40	[temp4] = B4;
	:032 czTXT   +   60	B6 = czTXT;
	:402 00000   +   50	B5 = A;		adres napisu
	:002 00000   +   40	B4 = 0;		liczba znaków w słowie
	:746 funkc   +   00	SkS funkc;
	:012 temp4   +   40	B4 = [temp4];
	:012 temp5   +   50	B5 = [temp5];
	:012 temp6 PODPR 60	B6 = [temp6];	i Return

prog1	:050 kodFS   +   00	A = FS;
	:626 00000   +   00	Wy6 = FS;
	:746 funkc   +   00	SkS funkc;
	:726 00000 PROGR 00	Stop;

funkc	:726 00000 funk2 00	Ślad - powrót do PROGR/PODPR
gdyLS	:001 poczt 00000 61	[poczt] = 0;	Skocz do czTTY/czTXT; A = znak...
funk2	:021 temp7   +   70	[temp7] = B7;
gdyFS	:070 00100   +   00	A = 64;
	:401 poczt 00000 61	[poczt] = A;	Skocz do czTTY/czTXT; A = znak...
jZnak	:116 00020   +   00	A >>>= 16;	A = znak w skali 20
kodFS	:670 00076   +   00	A &= 62;
	:246   +   00000 61			gdy NU, pominąć	
	:330 00066   +   00	A - FS;
	:046 gdyFS   +   00			gdy FS, przełączyć na cyfry	
	:330 00076   +   00	A - LS;
	:046 gdyLS   +   00			gdy LS, przełączyć na litery
	:330 00004   +   00	A - LF;
	:046 gdyLF   +   00			gdy LF, koniec tekstu
	:412 poczt   +   70	B7 = A + [poczt];
	:050 wzory   +   71	A = [wzory+B7];
	:046   +   mRząd 00	SknZ mRząd;	gdy spacja,
	:566 00000   +   00	XWy5;		to dodatkowy pusty rządek
mRząd	:012 wzorb   +   71	M = [wzory+B7+1];
nRząd	:566 00000   +   00	XWy5;
	:516 00010   +   00	AM <<<= 8;
	:046   +   nRząd 00	SknZ nRząd;
	:566 00000   +   00	XWy5;
	:566 00000 00000 61	XWy5;		Skocz do czTTY/czTXT; A = znak...

gdyLF	:012 temp7 funkc 70	B7 = [temp7];	i Powrót po śladzie

czTTY	:126 00000   +   00	We1; A = znak z dalekopisu
	:016 00042 jZnak 00	A <<<= 34;	i do jZnak

czTXT	:546   +   slowo 40	SkLC B4--;	czy są jeszcze znaki w słowie
	:050 znaki   +   00	A = [znaki];	są
	:016 00005 schow 00	A <<<= 5;	i do schowka
slowo	:050 00000   +   51	A = [B5];	słowo ze znakami tekstu
	:646   +     +   50	SkLC B5++;	wskaźnik na nast. słowo
	:032 00006   +   40	B4 = 6;		licznik znaków w słowie
schow	:401 znaki jZnak 00	[znaki] = A;	i do jZnak

znaki	:000 00000 00000 00	znaki słowa, drukowany i pozostałe
temp4	:000 00000 00000 00	B4 - licznik znaków w słowie
temp5	:000 00000 00000 00	B5 = adres kolejnego słowa tekstu
temp6	:000 00000 00000 00	B6 = funkcja pobierania znaku
temp7	:000 00000 00000 00	B7 - przedłużenie A


	:401 17200:		Adres wzorców znaków

wzory	:160 17437 01743 70
wzorb	:076 01600 00000 00	wzór ●
	:777 17766 17336 61
	:341 16060 00000 00	wzór E
	:250 12425 01242 50
	:052 02500 00000 00	wzór ≡
	:771 17606 14330 61
	:377 07700 00000 00	wzór A
	:000 00000 00000 00
	:000 00000 00000 00	wzór  
	:635 13766 17336 61
	:375 13440 00000 00	wzór S
	:607 17777 17030 00
	:000 00000 00000 00	wzór I
	:377 17760 03006 00
	:177 13760 00000 00	wzór U
	:777 17777 17777 71
	:377 17777 17776 00	wzór ⌂
	:777 17760 17036 01
	:377 13740 00000 00	wzór D
	:777 17706 14733 61
	:347 16340 00000 00	wzór R
	:100 14360 17036 01
	:377 13760 00000 00	wzór J
	:777 17703 00301 40
	:177 17760 00000 00	wzór N
	:777 17706 14330 61
	:201 10060 00000 00	wzór F
	:375 17760 17036 01
	:363 13140 00000 00	wzór C
	:777 17706 00743 11
	:141 14020 00000 00	wzór K
	:006 00300 17777 71
	:201 10060 03000 00	wzór T
	:607 14374 17336 31
	:343 16060 00000 00	wzór Z
	:777 17760 03006 00
	:140 06000 00000 00	wzór L
	:777 17730 00600 60
	:030 03017 17776 00	wzór W
	:777 17706 00300 60
	:177 17760 00000 00	wzór H
	:006 00703 03707 60
	:006 00160 03000 00	wzór Y
	:777 17706 14330 61
	:217 10340 00000 00	wzór P
	:375 17760 17633 01
	:377 17740 00000 00	wzór Q
	:375 17760 17036 01
	:377 13740 00000 00	wzór O
	:777 17766 17336 61
	:377 13140 00000 00	wzór B
	:375 17760 17036 61
	:375 13640 00000 00	wzór G
	:100 06016 00741 60
	:030 01000 00000 00	wzór ▲
	:777 17701 10140 60
	:006 00157 17776 00	wzór M
	:607 14717 00301 70
	:163 16060 00000 00	wzór X
	:076 07730 03003 00
	:037 10760 00000 00	wzór V
	:010 01407 00740 70
	:006 00100 00000 00	wzór ▼
	:160 17437 01743 70
	:076 01600 00000 00	wzór ●
	:205 10360 17336 61
	:377 13140 00000 00	wzór 3
	:250 12425 01242 50
	:052 02500 00000 00	wzór ≡
	:060 03006 00300 60
	:014 00000 00000 00	wzór -
	:000 00000 00000 00
	:000 00000 00000 00	wzór  
	:016 00300 00000 00
	:000 00000 00000 00	wzór '
	:315 17766 17336 61
	:377 13140 00000 00	wzór 8
	:407 10330 14630 61
	:207 10160 00000 00	wzór 7
	:777 17777 17777 71
	:377 17777 17776 00	wzór ⌂
	:120 05007 00360 70
	:024 01200 00000 00	wzór *
	:076 03706 00300 60
	:177 17760 00000 00	wzór 4
	:730 15400 00000 00
	:000 00000 00000 00	wzór ;
	:700 14000 00000 00
	:000 00000 00000 00	wzór ,
	:677 13700 00000 00
	:000 00000 00000 00	wzór !
	:330 15400 00000 00
	:000 00000 00000 00	wzór :
	:170 17660 16010 00
	:000 00000 00000 00	wzór (
	:277 13766 17336 61
	:375 13460 00000 00	wzór 5
	:060 03037 11760 60
	:014 00000 00000 00	wzór +
	:403 10337 10740 00
	:000 00000 00000 00	wzór )
	:615 14774 17236 21
	:347 16140 00000 00	wzór 2
	:777 17766 03146 10
	:140 06000 00000 00	wzór Ł
	:361 17467 13336 60
	:374 03400 00000 00	wzór 6
	:170 17660 17036 01
	:277 01700 00000 00	wzór 0
	:010 00677 17770 00
	:000 00000 00000 00	wzór 1
	:034 03746 17333 61
	:237 10740 00000 00	wzór 9
	:014 00700 17236 61
	:207 10140 00000 00	wzór ?
	:305 16747 06174 61
	:070 03015 00440 00	wzór &
	:100 06016 00741 60
	:030 01000 00000 00	wzór ▲
	:601 10000 00000 00
	:000 00000 00000 00	wzór .
	:401 10030 00600 60
	:006 00140 03002 00	wzór /
	:330 15433 01543 30
	:066 00000 00000 00	wzór =
	:010 01407 00740 70
	:006 00100 00000 00	wzór ▼

/*

  ●●●    ●●●●●●    ●●●●●   ●●●●●●   ●●●●●●●  ●●●●●●●   ●●●●●   ●●   ●●  ●●●●   ●●●●●●  ●●   ●●  ●●       ●●     ●●  ●●   ●●   ●●●●●   ●●●●●●    ●●●●●   ●●●●●●    ●●●●●   ●●●●●●●●  ●●   ●●  ●●   ●●  ●●     ●●  ●●   ●●  ●●    ●●  ●●●●●●●  
 ●●●●●   ●●●●●●●  ●●●●●●●  ●●●●●●●  ●●●●●●●  ●●●●●●●  ●●●●●●●  ●●   ●●  ●●●●   ●●●●●●  ●●  ●●   ●●       ●●●   ●●●  ●●   ●●  ●●●●●●●  ●●●●●●●  ●●●●●●●  ●●●●●●●  ●●●●●●●  ●●●●●●●●  ●●   ●●  ●●   ●●  ●●     ●●  ●●   ●●  ●●    ●●  ●●●●●●●  
●●   ●●  ●●   ●●  ●●   ●●  ●●   ●●  ●●       ●●       ●●       ●●   ●●   ●●        ●●  ●● ●●    ●●       ●●●● ●●●●  ●●●  ●●  ●●   ●●  ●●   ●●  ●●   ●●  ●●   ●●  ●●          ●●     ●●   ●●  ●●   ●●  ●●     ●●   ●● ●●    ●●  ●●       ●●   
●●●●●●●  ●●●●●●   ●●       ●●   ●●  ●●●●●    ●●●●●    ●●  ●●●  ●●●●●●●   ●●        ●●  ●●●●     ●●       ●● ●●● ●●  ●●●● ●●  ●●   ●●  ●●●●●●●  ●●   ●●  ●●●●●●   ●●●●●●      ●●     ●●   ●●  ●●   ●●  ●●  ●  ●●    ●●●      ●●●●       ●●    
●●●●●●●  ●●●●●●   ●●       ●●   ●●  ●●●●●    ●●●●●    ●●  ●●●  ●●●●●●●   ●●        ●●  ●●●●     ●●       ●●  ●  ●●  ●● ●●●●  ●●   ●●  ●●●●●●   ●● ● ●●  ●●●●●     ●●●●●●     ●●     ●●   ●●  ●●   ●●  ●● ●●● ●●    ●●●       ●●       ●●     
●●   ●●  ●●   ●●  ●●   ●●  ●●   ●●  ●●       ●●       ●●   ●●  ●●   ●●   ●●   ●●   ●●  ●● ●●    ●●       ●●     ●●  ●●  ●●●  ●●   ●●  ●●       ●● ●●●●  ●● ●●         ●●     ●●     ●●   ●●   ●● ●●   ●●●● ●●●●   ●● ●●      ●●      ●●      
●●   ●●  ●●●●●●●  ●●●●●●●  ●●●●●●●  ●●●●●●●  ●●       ●●●●●●●  ●●   ●●  ●●●●   ●●●●●●  ●●  ●●   ●●●●●●●  ●●     ●●  ●●   ●●  ●●●●●●●  ●●       ●●●●●●●  ●●  ●●   ●●●●●●●     ●●     ●●●●●●●    ●●●    ●●●   ●●●  ●●   ●●     ●●     ●●●●●●●  
●●   ●●  ●●●●●●    ●●●●●   ●●●●●●   ●●●●●●●  ●●        ●●●●●   ●●   ●●  ●●●●    ●●●●   ●●   ●●  ●●●●●●●  ●●     ●●  ●●   ●●   ●●●●●   ●●        ●●● ●●  ●●   ●●  ●●●●●●      ●●      ●●●●●      ●     ●●     ●●  ●●   ●●     ●●     ●●●●●●●  


 ●●●●●           ●●   ●●●●●   ●●●●●●●           ●●   ●●          ●●        ●●  ●●●●●●●          ●●     ●●●●●   ●●          ●●      ●●●      ●●   ●●●●●    ●●●●●    ●●●                           ●●                   
●●●●●●●          ●●  ●●●●●●●  ●●●●●●●     ●     ●●   ●●          ●●       ●●   ●●●●●●●    ●●     ●●   ●●●●●●●  ●●         ●●      ●●●●●    ●●●  ●●●●●●●  ●●●●●●●  ●● ●●                         ●●                    
     ●●          ●   ●●   ●●       ●●    ●●●    ●●   ●●  ●●      ●●  ●●  ●●    ●●         ●●      ●●  ●●   ●●  ●● ●●     ●●      ●●   ●●  ●●●●  ●●   ●●  ●●   ●●   ●●●          ●              ●●    ●●●●●●  ●●●●●●●  ●●●●●●●  
   ●●●   ●●●●●●       ●●●●●       ●●   ●●●●●●●  ●●●●●●●  ●●      ●●  ●●  ●●    ●●●●●●   ●●●●●●    ●●      ●●   ●●●●     ●●●●●●   ●●   ●●    ●●  ●●●●●●●      ●●     ●●●        ●●●            ●●     ●●●●●●   ●●●●●   
   ●●●   ●●●●●●       ●●●●●      ●●      ●●●    ●●●●●●●          ●●      ●●    ●●●●●●●  ●●●●●●    ●●    ●●     ●●●      ●●●●●●●  ●●   ●●    ●●   ●●●●●●     ●●     ●● ●● ●●   ●●●●●          ●●                ●●●    ●●●●●●●  
     ●●              ●●   ●●    ●●     ●●   ●●       ●●  ●●  ●●      ●●  ●●         ●●    ●●      ●●   ●●      ●●       ●●   ●●  ●●   ●●    ●●      ●●            ●●   ●●    ●●●●●●●        ●●       ●●●●●●     ●     
●●●●●●●              ●●●●●●●   ●●                    ●●  ●●  ●●  ●●  ●●   ●●   ●●●●●●●    ●●     ●●   ●●●●●●●  ●●●●●●●  ●●●●●●●   ●●●●●     ●●     ●●       ●●    ●●   ●●●            ●●   ●●        ●●●●●●           ●●●●●●●  
 ●●●●●                ●●●●●   ●●                     ●●  ●   ●   ●●        ●●   ●●●●●           ●●    ●●●●●●●  ●●●●●●●   ●●●●●     ●●●      ●●    ●●        ●●     ●●●●  ●●           ●●  ●●                          


{let instr = '';
	rz( 56,124,124,124,124,124, 56,  0,  0,'●');
	rz(255,255,219,219,219,195,195,  0,  0,'E');
	rz( 84, 84, 84, 84, 84, 84, 84,  0,  0,'≡');
	rz(252,254, 27, 27, 27,254,252,  0,  0,'A');
	rz(  0,  0,  0,  0,  0,  0,  0,  0,  0,' ');
	rz(206,223,219,219,219,251,114,  0,  0,'S');
	rz(195,255,255,195,  0,  0,  0,  0,  0,'I');
	rz(127,255,192,192,192,255,127,  0,  0,'U');
	rz(255,255,255,255,255,255,255,255,255,'⌂');
	rz(255,255,195,195,195,255,126,  0,  0,'D');
	rz(255,255, 27, 59,123,207,206,  0,  0,'R');
	rz( 32, 99,195,195,195,255,127,  0,  0,'J');
	rz(255,255, 12, 24, 48,255,255,  0,  0,'N');
	rz(255,255, 27, 27, 27,  3,  3,  0,  0,'F');
	rz(126,255,195,195,195,231,102,  0,  0,'C');
	rz(255,255, 24, 60,102,195,129,  0,  0,'K');
	rz(  3,  3,  3,255,255,  3,  3,  3,  0,'T');
	rz(195,227,243,219,207,199,195,  0,  0,'Z');
	rz(255,255,192,192,192,192,192,  0,  0,'L');
	rz(255,255, 96, 48, 24, 48, 96,255,255,'W');
	rz(255,255, 24, 24, 24,255,255,  0,  0,'H');
	rz(  3,  7, 12,248,248, 12,  7,  3,  0,'Y');
	rz(255,255, 27, 27, 27, 31, 14,  0,  0,'P');
	rz(126,255,195,243, 99,255,254,  0,  0,'Q');
	rz(126,255,195,195,195,255,126,  0,  0,'O');
	rz(255,255,219,219,219,255,102,  0,  0,'B');
	rz(126,255,195,195,219,251,122,  0,  0,'G');
	rz( 32, 48, 56, 60, 56, 48, 32,  0,  0,'▲');
	rz(255,255,  6, 12, 24, 12,  6,255,255,'M');
	rz(195,231, 60, 24, 60,231,195,  0,  0,'X');
	rz( 31, 63, 96,192, 96, 63, 31,  0,  0,'V');
	rz(  4, 12, 28, 60, 28, 12,  4,  0,  0,'▼');
	rz( 56,124,124,124,124,124, 56,  0,  0,'●');
	rz( 66,195,195,219,219,255,102,  0,  0,'3');
	rz( 84, 84, 84, 84, 84, 84, 84,  0,  0,'≡');
	rz( 24, 24, 24, 24, 24, 24,  0,  0,  0,'-');
	rz(  0,  0,  0,  0,  0,  0,  0,  0,  0,' ');
	rz(  7,  3,  0,  0,  0,  0,  0,  0,  0,"'");
	rz(102,255,219,219,219,255,102,  0,  0,'8');
	rz(131,195, 99, 51, 27, 15,  7,  0,  0,'7');
	rz(255,255,255,255,255,255,255,255,255,'⌂');
	rz( 40, 40, 28, 30, 28, 40, 40,  0,  0,'*');
	rz( 31, 31, 24, 24, 24,255,255,  0,  0,'4');
	rz(236,108,  0,  0,  0,  0,  0,  0,  0,';');
	rz(224, 96,  0,  0,  0,  0,  0,  0,  0,',');
	rz(223,223,  0,  0,  0,  0,  0,  0,  0,'!');
	rz(108,108,  0,  0,  0,  0,  0,  0,  0,':');
	rz( 60,126,195,129,  0,  0,  0,  0,  0,'(');
	rz( 95,223,219,219,219,251,115,  0,  0,'5');
	rz( 24, 24,126,126, 24, 24,  0,  0,  0,'+');
	rz(129,195,126, 60,  0,  0,  0,  0,  0,')');
	rz(198,231,243,211,203,207,198,  0,  0,'2');
	rz(255,255,216,204,196,192,192,  0,  0,'Ł');
	rz(120,252,222,219,217,248,112,  0,  0,'6');
	rz( 60,126,195,195,195,126, 60,  0,  0,'0');
	rz(  4,  6,255,255,  0,  0,  0,  0,  0,'1');
	rz( 14, 31,155,219,123, 63, 30,  0,  0,'9');
	rz(  6,  7,  3,211,219, 15,  6,  0,  0,'?');
	rz( 98,247,157,143,154,112, 96,208,144,'&');
	rz( 32, 48, 56, 60, 56, 48, 32,  0,  0,'▲');
	rz(192,192,  0,  0,  0,  0,  0,  0,  0,'.');
	rz(128,192, 96, 48, 24, 12,  6,  3,  1,'/');
	rz(108,108,108,108,108,108,  0,  0,  0,'=');
	rz(  4, 12, 28, 60, 28, 12,  4,  0,  0,'▼');

function rz(a,b,c,d,e,f,g,h,i,znak) {
 let	n1 = (((a*256+b)*256+c)*256+d)*128+(e>>>1),
	n2 = (((((e&1)*256+f)*256+g)*256+h)*256+i)*32;
   function r(n) {
    let	tpg= Math.floor(n / 0o10000000000),
	ar = (n >> 17) & 0o17777,
	nr = (n >>  4) & 0o17777,
	bm = (n >>  1) & 7,
	bz = n & 1;
    return ':' + (tpg+1024).toString(8).substr(1) +' '+ (ar+32768).toString(8).substr(1) +' '+ (nr+32768).toString(8).substr(1) +' '+ bm.toString(8) + bz;
   }
 instr += '\t' + r(n1) + '\n\t' + r(n2) + '\twzór ' + znak + '\n';
}
console.log(instr);
}

*/
